import  Koa  from "koa"
import views from 'koa-views'
import Router from 'koa-router'
import path from 'path'
import koaBodyParser from 'koa-bodyparser'
import jwt from 'jsonwebtoken'
import verify from './verify'

export const secret = 'xxdjd123'  // 加密串


const router = Router()

const users = [
    {
        id: 1,
        name: 'admin',
        pwd: '123456',
        userInfo: {
          age: 20, 
          sex: '男'
        }
    }
]

const app = new Koa()
app.use(     //  挂载一个中间件
    views(
        path.join(__dirname,'./views'),{
    extension: 'ejs'
}))
app.use(koaBodyParser())

router.get('/login',async function(ctx) {
    let title = 'hello jwt'
    await ctx.render('index',{   // 把index.ejs 找到,结合ejs模板编译，再把title展示出来，过程需要时间，所以要await
        title
    })
})

router.post('/login',async function(ctx) {
    //  用户在表单里写了什么？
    // console.log(ctx.request)
    const {name,pwd} =ctx.request.body;    //  访问请求对象中的请求体
    if (!name, !pwd) ctx.body= '出错了'

    let index = users.findIndex((user) => user.name == name && user.pwd == pwd)
    if (index >= 0) { 
        // 服务器端下放令牌环
        const token = jwt.sign({
           user : users[index],
        },secret,{
            expiresIn: 600     //  授权码的时间限制
        })
        ctx.body = {  // 提交完页面后输出
            code: 200,
            token
        }
    }
})

router.post('/verify', async function(ctx) {
    
    const {token} = ctx.request.body
    console.log(token);
    try{
        const payload = jwt.verify(token,secret)  //  解密，显示里面的数据
        console.log(payload, '--------');
        ctx.body = payload
    }catch(e) {   //  出了问题
        ctx.body = {
            code: 500
        }
    }
})

// 登录 -> jwt-verify
// 未登录 跳转去登录
// router.get('./userInfo',verify,function(ctx){
router.get('/userInfo',verify,function(ctx){
    ctx.body={
        code:200,
        user:ctx.user || {}
    };
})

router.get('/showUser',async (ctx)=>{
    await ctx.render('showUser')
})

app    
  .use(router.routes())    //  启用添加的所有路由
  .use(router.allowedMethods());


app.listen(1234,() => {
    console.log('服务启动');
})
